package com.sxt.webclient.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.reactive.function.client.WebClient;

import reactor.core.publisher.Mono;

@RestController
public class RestTestController {
	
	@Autowired//名字要与WebClientConfig中的@Bean("webClientTemplate")一致
	private WebClient webClientTemplate;
	
	@Autowired
	private WebClient webClientRestTemplate;
	
	//将响应结果映射为一个 String 字符串，并打印出来
    @GetMapping("/test")
    public void test() {
    	WebClient webClient = WebClient.create("http://jsonplaceholder.typicode.com");
    	Mono<String> mono = webClient
    	        .get() // GET 请求
    	        .uri("/posts/55")  // 请求路径
    	        .retrieve() // 获取响应体
    	        .bodyToMono(String.class); //响应数据类型转换
    	
    	System.out.println(mono.block());
    	return;
    }
    
    
    @GetMapping("/test0")
    public void test0() {
    	String url = "http://jsonplaceholder.typicode.com/posts?userId=5";
    	Mono<String> mono = webClientTemplate
    	        .get() // GET 请求
    	        .uri(url)  // 请求路径
    	        .retrieve() // 获取响应体
    	        .bodyToMono(String.class); //响应数据类型转换
    	 
    	System.out.println(mono.block());
    	return;
    }
    
    @GetMapping("/test1")
    public void test1() {
    	String url = "http://jsonplaceholder.typicode.com/posts";
    	Mono<String> mono = webClientTemplate
    	        .get() // GET 请求
    	        .uri(url)  // 请求路径
    	        .retrieve() // 获取响应体
    	        .bodyToMono(String.class); //响应数据类型转换
    	 
    	System.out.println(mono.block());
    	return;
    }
    
    @GetMapping("/test2")
    public void test2() {
        System.out.println("--- begin ---");
        // 创建 WebClient 对象
        WebClient webClient = WebClient.builder()
                .baseUrl("http://jsonplaceholder.typicode.com")
                .build();
        Mono<String> mono = webClient
                .get() // GET 请求
                .uri("/posts/1")  // 请求路径
                .retrieve() // 获取响应体
                .bodyToMono(String.class); //响应数据类型转换
 
        // 订阅（异步处理结果）
        mono.subscribe(result -> {
            System.out.println(result);
        });
 
        System.out.println("--- end ---");
        return;
    }
}
